home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / artemis1 / src / arealist.c next >
Encoding:
C/C++ Source or Header  |  1995-11-08  |  1.6 KB  |  87 lines

  1. /*
  2.     ARTemis (Graphic Editor for FM-TOWNS)
  3.     
  4.     (c) MATSUUCHI Ryosuke 1992,1993,1994,1995
  5.  
  6.     arealist.c
  7.         領域リストを管理するモジュール (objectively designed)
  8.  
  9.     ALnew                    Arealist を生成する
  10.     ALdelete(al)            Arealist を消滅させる
  11.     ALaddarea(al,area)        Arealist 内のリストに Area を追加する
  12.     ALdeletearea(al)        最後に追加した Area を削除する
  13.     ALgetfirstarea(al)        Arealist 内のリストの先頭の Area を得る
  14.     ALgetnextarea(al)        リスト内の次の Area を得る
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <malloc.h>
  19. #include "arealist.h"
  20.  
  21. Arealist *ALnew()
  22. {
  23.     Arealist *al;
  24.     if ((al = malloc(sizeof(Arealist))) == NULL)
  25.         return NULL;
  26.     al->arealist = NULL;
  27.     al->curarea = NULL;
  28.     return al;
  29. }
  30.  
  31. void ALdelete(Arealist *al)
  32. {
  33.     if (al == NULL)
  34.         return;
  35.     Area *p,*t;
  36.     for (p=al->arealist,t=p->next; p!=NULL; p=t,t=(t==NULL?NULL:t->next))
  37.         free(p);
  38.     free(al);
  39. }
  40.  
  41. Area *ALaddarea(Arealist *al, Area *area)
  42. {
  43.     Area *new;
  44.     if ((new = malloc(sizeof(Area))) == NULL)
  45.         return NULL;
  46.     *new = *area;
  47.     new->next = al->arealist;
  48.     al->arealist = new;
  49.     return new;
  50. }
  51.  
  52. void ALdeletearea(Arealist *al)
  53. {
  54.     if (al->arealist == NULL)
  55.         return;
  56.     Area *t;
  57.     t = al->arealist;
  58.     al->arealist = al->arealist->next;
  59.     free(t);
  60. }
  61.  
  62. Area *ALgetfirstarea(Arealist *al)
  63. {
  64.     al->curarea = al->arealist;
  65.     return al->curarea;
  66. }
  67.  
  68. Area *ALgetnextarea(Arealist *al)
  69. {
  70.     if (al->curarea == NULL)
  71.         return NULL;
  72.     al->curarea = al->curarea->next;
  73.     return al->curarea;
  74. }
  75.  
  76. void ALarea_setdata(Area *area, void *data)
  77. {
  78.     area->data = data;
  79. }
  80.  
  81. void *ALarea_getdata(Area *area)
  82. {
  83.     return area->data;
  84. }
  85.  
  86. /* end of arealist.c */
  87.